/**
 * 社交登录工具函数
 */
import { SocialTypeEnum } from './constants.js';
import { generateUUID } from './common.js';
import API from '@/api/index.js';
import { setToken } from './auth.js';
import store from '@/store/index.js';

/**
 * 微信小程序登录
 * @param {Object} options - 登录选项
 * @returns {Promise<Object>} 登录结果
 */
export function wxMiniAppLogin(options = {}) {
  // 获取场景值，如果没有提供
  if (!options.scene && options.scene !== 0) {
    // #ifdef MP-WEIXIN
    try {
      const launchOptions = wx.getLaunchOptionsSync();
      if (launchOptions && (launchOptions.scene || launchOptions.scene === 0)) {
        options.scene = launchOptions.scene;
        console.log('wxMiniAppLogin获取到微信小程序场景值:', options.scene);
      } else {
        options.scene = 0; // 默认使用0
      }
    } catch (e) {
      console.error('wxMiniAppLogin获取场景值失败:', e);
      options.scene = 0; // 出错时使用0
    }
    // #endif
    // #ifndef MP-WEIXIN
    options.scene = 0; // 非微信小程序环境下使用0
    // #endif
  }
  
  return socialLogin(SocialTypeEnum.WECHAT_MINI_APP.type, 'weixin', options);
}

/**
 * 统一的社交登录处理函数
 * @param {Number} socialType - 社交平台类型，参考SocialTypeEnum
 * @param {String} provider - 提供商ID, 如'weixin','qq','sinaweibo'等
 * @param {Object} options - 其他参数
 * @returns {Promise<Object>} 登录结果
 */
export function socialLogin(socialType, provider, options = {}) {
  return new Promise((resolve, reject) => {
    const state = generateUUID();
    
    // 获取小程序启动时的场景值，如果options中没有提供
    let scene = options.scene;
    if ((scene === undefined || scene === null) && provider === 'weixin') {
      // #ifdef MP-WEIXIN
      try {
        const launchOptions = wx.getLaunchOptionsSync();
        if (launchOptions && (launchOptions.scene || launchOptions.scene === 0)) {
          scene = launchOptions.scene;
          console.log('socialLogin获取到微信小程序场景值:', scene);
        } else {
          scene = 0; // 默认使用0
        }
      } catch (e) {
        console.error('socialLogin获取场景值失败:', e);
        scene = 0; // 出错时使用0
      }
      // #endif
      // #ifndef MP-WEIXIN
      scene = 0; // 非微信小程序环境下使用0
      // #endif
    }
    
    uni.login({
      provider: provider,
      success: loginRes => {
        const code = loginRes.code;
        
        // 调用社交登录接口
        store.dispatch('user/socialLogin', {
          type: socialType,
          code: code,
          state: state,
          scene: scene // 添加场景值参数
        }).then(result => {
          resolve(result);
        }).catch(error => {
          reject(error);
        });
      },
      fail: err => {
        console.error(`${provider}登录失败:`, err);
        reject(err);
      }
    });
  });
}

/**
 * 根据社交类型获取平台提供商ID
 * @param {Number} socialType - 社交平台类型
 * @returns {String} 对应的提供商ID
 */
export function getProviderBySocialType(socialType) {
  switch (socialType) {
    case SocialTypeEnum.WECHAT_MINI_APP.type:
    case SocialTypeEnum.WECHAT_MP.type:
    case SocialTypeEnum.WECHAT_OPEN.type:
      return 'weixin';
    // 未来可以扩展其他平台
    // case SocialTypeEnum.QQ.type:
    //   return 'qq';
    // case SocialTypeEnum.WEIBO.type:
    //   return 'sinaweibo';
    default:
      return '';
  }
} 